home *** CD-ROM | disk | FTP | other *** search
/ PC/CD Gamer UK 120 / CD Gamer Issue 120 (March 2003) (Disc 2).ISO / mods / Q2_Codered / codeRED1_0.exe / Data1.cab / cl_inv.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-08-13  |  2.9 KB  |  143 lines

  1. /*
  2. Copyright (C) 1997-2001 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20. // cl_inv.c -- client inventory screen
  21.  
  22. #include "client.h"
  23.  
  24. /*
  25. ================
  26. CL_ParseInventory
  27. ================
  28. */
  29. void CL_ParseInventory (void)
  30. {
  31.     int        i;
  32.  
  33.     for (i=0 ; i<MAX_ITEMS ; i++)
  34.         cl.inventory[i] = MSG_ReadShort (&net_message);
  35. }
  36.  
  37.  
  38. /*
  39. ================
  40. Inv_DrawString
  41. ================
  42. */
  43. void Inv_DrawString (int x, int y, char *string)
  44. {
  45.     while (*string)
  46.     {
  47.         Draw_Char (x, y, *string);
  48.         x+=8;
  49.         string++;
  50.     }
  51. }
  52.  
  53. void SetStringHighBit (char *s)
  54. {
  55.     while (*s)
  56.         *s++ |= 128;
  57. }
  58.  
  59. /*
  60. ================
  61. CL_DrawInventory
  62. ================
  63. */
  64. #define    DISPLAY_ITEMS    17
  65.  
  66. void CL_DrawInventory (void)
  67. {
  68.     int        i, j;
  69.     int        num, selected_num, item;
  70.     int        index[MAX_ITEMS];
  71.     char    string[1024];
  72.     int        x, y;
  73.     char    binding[1024];
  74.     char    *bind;
  75.     int        selected;
  76.     int        top;
  77.  
  78.     selected = cl.frame.playerstate.stats[STAT_SELECTED_ITEM];
  79.  
  80.     num = 0;
  81.     selected_num = 0;
  82.     for (i=0 ; i<MAX_ITEMS ; i++)
  83.     {
  84.         if (i==selected)
  85.             selected_num = num;
  86.         if (cl.inventory[i])
  87.         {
  88.             index[num] = i;
  89.             num++;
  90.         }
  91.     }
  92.  
  93.     // determine scroll point
  94.     top = selected_num - DISPLAY_ITEMS/2;
  95.     if (num - top < DISPLAY_ITEMS)
  96.         top = num - DISPLAY_ITEMS;
  97.     if (top < 0)
  98.         top = 0;
  99.  
  100.     x = (viddef.width-256)/2;
  101.     y = (viddef.height-240)/2;
  102.  
  103.     // repaint everything next frame
  104.     SCR_DirtyScreen ();
  105.  
  106.     Draw_Pic (x, y+8, "inventory");
  107.  
  108.     y += 24;
  109.     x += 24;
  110.     Inv_DrawString (x, y, "hotkey ### item");
  111.     Inv_DrawString (x, y+8, "------ --- ----");
  112.     y += 16;
  113.     for (i=top ; i<num && i < top+DISPLAY_ITEMS ; i++)
  114.     {
  115.         item = index[i];
  116.         // search for a binding
  117.         Com_sprintf (binding, sizeof(binding), "use %s", cl.configstrings[CS_ITEMS+item]);
  118.         bind = "";
  119.         for (j=0 ; j<256 ; j++)
  120.             if (keybindings[j] && !Q_stricmp (keybindings[j], binding))
  121.             {
  122.                 bind = Key_KeynumToString(j);
  123.                 break;
  124.             }
  125.  
  126.         Com_sprintf (string, sizeof(string), "%6s %3i %s", bind, cl.inventory[item],
  127.             cl.configstrings[CS_ITEMS+item] );
  128.         if (item != selected)
  129.             SetStringHighBit (string);
  130.         else    // draw a blinky cursor by the selected item
  131.         {
  132.             if ( (int)(cls.realtime*10) & 1)
  133.                 Draw_Char (x-8, y, 15);
  134.         }
  135.         Inv_DrawString (x, y, string);
  136.         y += 8;
  137.     }
  138.  
  139.  
  140. }
  141.  
  142.  
  143.